home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / nt / emacssrc.zip / EMACSSRC.TAR / emacs-19.17 / oldxmenu / addsel.c < prev    next >
C/C++ Source or Header  |  1993-05-28  |  2KB  |  94 lines

  1. #include "copyright.h"
  2.  
  3. /* $Header: /u/src/emacs/19.0/oldXMenu/RCS/AddSel.c,v 1.1 1992/04/11 22:10:17 jimb Exp $ */
  4. /* Copyright    Massachusetts Institute of Technology    1985    */
  5.  
  6. /*
  7.  * XMenu:    MIT Project Athena, X Window system menu package
  8.  *
  9.  *     XMenuAddSelection - Adds a selection to an XMenu object.
  10.  *
  11.  *    Author:        Tony Della Fera, DEC
  12.  *            August, 1985
  13.  *
  14.  */
  15.  
  16. #include "XMenuInt.h"
  17.  
  18. int
  19. XMenuAddSelection(display, menu, p_num, data, label, active)
  20.     Display *display;
  21.     register XMenu *menu;    /* Menu object to be modified. */
  22.     register int p_num;        /* Pane number to be modified. */
  23.     char *data;            /* Data value. */
  24.     char *label;        /* Selection label. */
  25.     int active;            /* Make selection active? */
  26. {
  27.     register XMPane *pane;    /* Pane containing the new selection. */
  28.     register XMSelect *select;    /* Newly created selection. */
  29.  
  30.  
  31.     int label_length;        /* Label lenght in characters. */
  32.     int label_width;        /* Label width in pixels. */
  33.     
  34.     /*
  35.      * Check for NULL pointers!
  36.      */
  37.     if (label == NULL) {
  38.     _XMErrorCode = XME_ARG_BOUNDS;
  39.     return(XM_FAILURE);
  40.     }
  41.     /*
  42.      * Find the right pane.
  43.      */
  44.     pane = _XMGetPanePtr(menu, p_num);
  45.     if (pane == NULL) return(XM_FAILURE);
  46.  
  47.     /*
  48.      * Calloc the XMSelect structure.
  49.      */
  50.     select = (XMSelect *)calloc(1, sizeof(XMSelect));
  51.     if (select == NULL) {
  52.     _XMErrorCode = XME_CALLOC;
  53.     return(XM_FAILURE);
  54.     }
  55.     /*
  56.      * Determine label size.
  57.      */
  58.     label_length = strlen(label);
  59.     label_width = XTextWidth(menu->s_fnt_info, label, label_length);
  60.     
  61.     /*
  62.      * Fill the XMSelect structure.
  63.      */
  64.     select->type = SELECTION;
  65.     select->active = active;
  66.     select->serial = -1;
  67.     select->label = label;
  68.     select->label_width = label_width;
  69.     select->label_length = label_length;
  70.     select->data = data;
  71.     select->parent_p = pane;
  72.     
  73.     /*
  74.      * Insert the selection at the end of the selection list.
  75.      */
  76.     emacs_insque(select, pane->s_list->prev);
  77.  
  78.     /*
  79.      * Update the selection count.
  80.      */
  81.     pane->s_count++;
  82.  
  83.     /*
  84.      * Schedule a recompute.
  85.      */
  86.     menu->recompute = 1;
  87.  
  88.     /*
  89.      * Return the selection number just added.
  90.      */
  91.     _XMErrorCode = XME_NO_ERROR;
  92.     return((pane->s_count - 1));
  93. }
  94.